import axios from "axios";
import enhanceResponse from "./utils/enhanceResponse";
/**
 * 缓存方案：
 * 单一接口缓存：在_config中设置cache: true
 * 多关联接口缓存：全局参数添加字段`cachePair`,这样的话只有第一次调用get接口，以及调用set接口后的第一次调用get接口才会发送请求，其他时候都是使用缓存。
 * 结构如下：
 * [
        {
            get: "/api/get",
            set: "/api/set"
        }
    ]
 */
const cachesMap = new Map();
export default (options) => {
  return (config) => {
    const { cachePair } = options;
    const { _config, url } = config;
    if (isPairGet(cachePair, url) && cachesMap.get(url)) {
      return Promise.resolve(enhanceResponse(cachesMap.get(url), config));
    }
    return new Promise((resolve, reject) => {
      axios.defaults
        .adapter(config)
        .then((res) => {
          if (useCache) {
            dataset.set(key, JSON.parse(res.data).result, {
              maxAge: config._config.maxAge,
            });
          }
          resolve(res);
        })
        .catch((e) => {
          dataset.delete(key);
          reject(e);
        });
    });
  };
};

function isPairGet(pair, url) {
  if (!pair || !Array.isArray(pair) || !pair.length) {
    return false;
  }
  return pair.find((item) => item.get === url);
}
function isPairSet(pair, url) {
  if (!pair || !Array.isArray(pair) || !pair.length) {
    return false;
  }
  return pair.find((item) => item.set === url);
}
